home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1994 / MacHack 1994.toast / MacHack™94 / Talks & Papers / Timothy Knox / Pocket6.3 / Source / PocketForthAppl.asm < prev    next >
Assembly Source File  |  1994-06-24  |  2KB  |  96 lines

  1. ; This file is:  PocketForthAppl.asm - 8:57:51 PM  1/21/87
  2. ; 32 bit mode aware - 6/23/91
  3.  
  4. INCLUDE    Traps.txt        ; all of the toolbox macros
  5.  
  6. Start:    _MoreMasters
  7.     
  8.     PEA    -4(A5)        ; thePort(A5)
  9.     _InitGraf
  10.     _InitFonts
  11.     _InitWindows
  12.     _InitMenus
  13.     _TEInit
  14.     PEA    Exit        ; resume button action address
  15.     _InitDialogs
  16.     MOVE.L    #$0000FFFF,D0    ; allEvents
  17.     _FlushEvents        ; clear the event que
  18.     _InitCursor        ; set cursor to the arrow
  19.  
  20.     ; load the DICT resource
  21.     CLR.L    -(SP)        
  22.     MOVE.L    #'DICT',-(SP)
  23.     MOVE    #257,-(SP)
  24.     _GetResource        ; load DICT resource ID = 257
  25.     MOVE.L    (SP)+,DictH(A5) ; stash handle in DictH
  26.     BEQ.S    NoRoom
  27.     
  28.     ; Calculate the address of the DICT and jump to it
  29.     MOVE.L    DictH(A5),A0    ; will pick it up and save it.
  30.     MOVE.L    (A0),D0        ; get the start address
  31.     BSR.S    AStrip        ; mask out block identifier bits 
  32.     MOVE.L    D0,A0
  33.     LEA    Expand,A1    ; carry this address, to the DICT
  34.     JMP    (A0)
  35.  
  36. NoRoom:    CLR    -(SP)        ; Room for dismiss item.
  37.     MOVE    #258,-(SP)    ; Push the resource ID.
  38.     CLR.L    -(SP)        ; no filter function
  39.     _StopAlert        ; "red" alert box.
  40. Exit:    _ExitToShell
  41.  
  42. Expand:    MOVE.L    DictH(A5),A0
  43.     _HUnlock        ; unlock the dictionary
  44.     
  45.     MOVE.L    DictH(A5),A0
  46.     _GetHandleSize        ; add the passed in size ...
  47.     ADD    (A6)+,D0    ; to the previous size and reset
  48.     MOVE.L    DictH(A5),A0
  49.     _SetHandleSize        ; the dictionary block size.
  50.     BNE.S    NoRoom
  51.     
  52.     MOVE.L    DictH(A5),A0    ; re-lock it
  53.     _HLock
  54.     BNE.S    NoRoom
  55.  
  56.     MOVE.L    DictH(A5),A0    ; will pick it up and save it.
  57.     MOVE.L    (A0),D0        ; get the start address
  58.     BSR.S    AStrip
  59.     MOVE.L    D0,A0
  60.     JMP    4(A0)
  61.  
  62. AStrip:    ; make sure the jump address (in D0) is 32 bit clean
  63.     MOVE.L    D0,D3
  64.  
  65.     ; check for 64K ROM
  66.     MOVE    #$A86E,D0    ; _InitGraf
  67.     _GetTrapAddress.newTool
  68.     MOVEA.L    A0,A1
  69.     MOVE    #$AA6E,D0    ; _InitGraf AND $200
  70.     _GetTrapAddress.newTool
  71.     MOVE.L    D3,D0
  72.     CMPA.L    A0,A1        ; if = then 64KROM
  73.     BEQ.S    @0
  74.  
  75.     ; check for existance of _StripAddress
  76.     MOVE    #$A89F,D0    ; _Unimplemented
  77.     _GetTrapAddress.newTool
  78.     MOVEA.L    A0,A1
  79.     MOVE    #$A055,D0    ; _StripAddress
  80.     _GetTrapAddress.newOS
  81.     MOVE.L    D3,D0
  82.     CMPA.L    A0,A1        ; is _StripAddress implemented?
  83.     BEQ.S    @0
  84.  
  85.     ; mask out high byte unless 32 bit addressing mode
  86.     _StripAddress
  87.     RTS
  88.  
  89.     ; If _StripAddress doesn't exist, do it by hand
  90.     @0:    ANDI.L    #$FFFFFF,D0
  91.     RTS
  92.  
  93. DictH:    DS.L    1        ; hold the DICT's handle
  94.  
  95. END
  96.